Automatische Installation von Software via winget in der Windows Sandbox
Windows bringt seiner einiger Zeit ein sehr nützliches Feature Sandbox mit sich. Ich nutze die Sandbox für das Testen von Sofware, da der Zustand bei jedem Start auf eine frische Windows-Installation zurückgesetzt wird. Für einige Use Cases kann es aber sinnvoll sein, ein gewisse Basisinstallation an Software in der Sandbox zu Verfügung zu haben. Das Zurücksetzen der Sandbox lässt sich nicht verhindern, aber die Installation von Software bei jedem Start automatisieren. Dazu wird auf winget - ein Paketmanager für Windows - zurückgegriffen. Durch Konfigurationsdateien können hier individuelle Sets an automatischen Installationsskripten für unterschiedliche Zwecke erstellt und bei Bedarf gestartet werden.
Sandbox Konfigurationsdatei
Die Datei sanbox.wsb definiert eine Konfiguration, die beim Start auf die Sandbox angewandt wird. Eine Konfigurationsdatei ist ausführbar und startet direkt die entsprechend konfigurierte Sandbox-Umgebung.
Im folgenden Skript wird ein Ordner auf dem PC als HostFolder definiert, der in der Sandbox unter einem definierten Pfad SandboxFolder bereitgestellt wird. Dieser Order wird benötigt, um das Installationsskript und die Installationsdateien zwischenzuspeichern und beherbergt damit auch das unten angeführte Hilfsskript und Installationsskript. Dieser eine lokale Order auf dem PC, fasst somit eine Konfiguration zusammen und hat zusätzlich den Vorteil, dass die Installationsdateien für winget nicht bei jedem Start erneut heruntergeladen werden müssen.
<Configuration> <MappedFolders> <MappedFolder> <HostFolder>C:\Sandbox\MyPersonalBox</HostFolder> <SandboxFolder>C:\autodeploy</SandboxFolder> <ReadOnly>false</ReadOnly> </MappedFolder> </MappedFolders> <LogonCommand> <Command>C:\autodeploy\run.cmd</Command> </LogonCommand> </Configuration>
Hilfsskript zum Ausführen des Installationsskripts
Die Datei run.cmd ist ein Hilfsskript, dass das eigentliche PowerShell-Installationsskript in der Sandbox ausführt.
start powershell.exe -executionpolicy unrestricted -windowstyle normal -noexit -file C:\autodeploy\install.ps1
Installationsskript
Die Datei install.ps1 ist das eigentliche Installationsskript, das zunächst winget in der Sandbox installiert und danach die aktuellste Version der gewünschten Software via winget lädt und installiert. Im ersten Teil wird winget selbst installiert, dieser bleibt somit immer unverändert. Im zweiten Teil folgen 1-n Befehle zum Installieren von Software via winget.
## ################################################################################################################ ## install winget ## reference for needed dependencies: https://github.com/microsoft/winget-pkgs/blob/master/Tools/SandboxTest.ps1 ## cd C:\autodeploy If (-Not(Test-Path -Path .\uixaml.appx)) { Invoke-WebRequest -outfile .\uixaml.appx "https://github.com/microsoft/microsoft-ui-xaml/releases/download/v2.8.6/Microsoft.UI.Xaml.2.8.x64.appx" } If (-Not(Test-Path -Path .\vclibs.appx)) { Invoke-WebRequest -outfile .\vclibs.appx https://aka.ms/Microsoft.VCLibs.x64.14.00.Desktop.appx } If (-Not(Test-Path -Path .\winget.msixbundle)) { Invoke-WebRequest -outfile .\winget.msixbundle https://aka.ms/getwinget } Add-AppxPackage .\uixaml.appx Add-AppxPackage .\vclibs.appx Add-AppxPackage .\winget.msixbundle ## ################################################################################################################ ## install custom software ## find package names for winget via https://winget.run/ ## winget install --accept-package-agreements --accept-source-agreements mozilla.firefox